\subsubsection{Linux}
Nehmen wir das struct \TT{tm} aus \TT{time.h} in Linux als Beispiel:

\lstinputlisting[style=customc]{patterns/15_structs/3_tm_linux/GCC_tm.c}

Kompilieren wir das Beispiel mit GCC 4.4.1:

\lstinputlisting[caption=GCC 4.4.1,style=customasmx86]{patterns/15_structs/3_tm_linux/GCC_tm_DE.asm}
Aus irgendwelchen Gründen hat \IDA hier nicht die Namen der lokalen Variablen im lokalen Stack hinzugeschrieben.
Da wir aber bereits erfahrene Reverse Engineers sind, können wir in diesem einfachen Beispiel auch ohne diese
Information auskommen.

\myindex{x86!\Instructions!LEA}
Man beachte besonders den Befehl\TT{lea edx, [eax+76Ch]}~---dieser Befehl addiert lediglich \TT{0x76C} (1900) zum Wert
in \EAX, ohne jedoch die Flags zu verändern. Siehe hierzu auch den entsprechenden Abschnitt über
\LEA{}~(\myref{sec:LEA}).

\myparagraph{GDB}
Versuchen wir dieses Beispiel in GDB zu laden
\footnote{Das Ergebnis von \IT{date} ist zu Demonstrationszwecken leicht korrigiert worden. Natürlich ist es nicht
möglich, GDB noch in der gleichen Sekunde auszuführen.}:

\lstinputlisting[caption=GDB]{patterns/15_structs/3_tm_linux/GCC_tm_GDB.txt}
Wir finden unser struct leicht im Stack.
Zuerst schauen wir uns an, wie es in \IT{time.h} definiert ist:

\begin{lstlisting}[caption=time.h, label=struct_tm,style=customc]
struct tm
{
  int	tm_sec;
  int	tm_min;
  int	tm_hour;
  int	tm_mday;
  int	tm_mon;
  int	tm_year;
  int	tm_wday;
  int	tm_yday;
  int	tm_isdst;
};
\end{lstlisting}
Man beachte, dass hier 32-Bit \Tint anstelle von WORD in SYSTEMTIME verwendet werden, sodass jedes Feld 32 Bit belegt.

Hier sind die Felder unseres structs im Stack:

\begin{lstlisting}
0xbffff0dc:	0x080484c3	0x080485c0	0x000007de	0x00000000
0xbffff0ec:	0x08048301	0x538c93ed	0x00000025 sec	0x0000000a min
0xbffff0fc:	0x00000012 hour	0x00000002 mday	0x00000005 mon 	0x00000072 year
0xbffff10c:	0x00000001 wday	0x00000098 yday	0x00000001 isdst0x00002a30
0xbffff11c:	0x0804b090	0x08048530	0x00000000	0x00000000
\end{lstlisting}

Oder als Tabelle:

\begin{center}
\begin{tabular}{ | l | l | l | }
\hline
\headercolor{} Hexadezimalzahl & 
\headercolor{} Dezimalzahl & 
\headercolor{} Feldname \\
\hline
0x00000025 & 37 	& tm\_sec \\
\hline
0x0000000a & 10 	& tm\_min \\
\hline
0x00000012 & 18 	& tm\_hour \\	
\hline
0x00000002 & 2 		& tm\_mday \\	
\hline
0x00000005 & 5 		& tm\_mon \\	
\hline
0x00000072 & 114 	& tm\_year \\
\hline
0x00000001 & 1 		& tm\_wday \\	
\hline
0x00000098 & 152 	& tm\_yday \\	
\hline
0x00000001 & 1 		& tm\_isdst \\
\hline
\end{tabular}
\end{center}
Genau wie bei SYSTEMTIME(\myref{sec:SYSTEMTIME}) sind auch hier noch weitere Felder verfügbar, die nicht verwendet
werden, wie z.B. tm\_wday, tm\_yday, tm\_isdst.
